/**
 * @addtogroup load_so
 * load_so
 * @{
 */
/**
 * @file        load_so.h
 * @brief       XXXX
 * @note        使用c语言开发项目式经常会遇到动态库的加载问题，
 *              本文件提供了一个简单的动态库加载接口
 * @author      靳普诏(puzhao.jin@hopechart.com)
 * @date        2025/02/25
 * @version     1.0

 * @par         修改日志
 * <table>
 * <tr><th>Date         <th>Version     <th>Author      <th> Description
 * <tr><td>2025/02/25   <td>1.0         <td>靳普诏       <td> 创建初始版本
 * @copyright 杭州鸿泉物联网技术股份有限公司
 */

#ifndef _LOAD_SO_H_
#define _LOAD_SO_H_


#ifdef __cplusplus
extern "C"
{
#endif

/**
 * @brief 加载动态库
 * @param so_path 动态库路径
 * @return 动态库句柄，失败返回NULL
 */
void* load_so_open(const char* so_path);

/**
 * @brief 从动态库中获取符号（函数或变量）地址
 * @param handle 动态库句柄
 * @param symbol_name 符号名称
 * @return 符号地址，失败返回NULL
 */
void* load_so_get_symbol(void* handle, const char* symbol_name);

/**
 * @brief 关闭动态库
 * @param handle 动态库句柄
 * @return 0成功，-1失败
 */
int load_so_close(void* handle);

/**
 * @brief 获取最后一次错误信息
 * @return 错误信息字符串
 */
const char* load_so_error(void);

#ifdef __cplusplus
}  ///< extern "C"
#endif

#endif  ///< _LOAD_SO_H_

